package cliente;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

import javax.swing.JFrame;
import javax.swing.JPanel;

import jugador.PuntoJugador;


public class Cliente5_2 extends JPanel implements Runnable{
	static final String HOST = "localhost"; 
	static final int PUERTO=4999; //puerto en el cual recibe el servidor
	Socket skCliente;             //socket mediante el cual me conecto al servidor 
	DataInputStream flujoEntrada; 
	DataOutputStream flujoSalida;
	
	PuntoJugador puntos[];
	int idCliente;
	int numPuntos;
	
	public Cliente5_2(){
		numPuntos=4;
		puntos = new PuntoJugador[numPuntos];//como maximo 4 clientes 4 puntos
		for(int i=0;i<numPuntos;i++){
			puntos[i]= new PuntoJugador();
		}
		idCliente=0;

		//Establecer la conexion con el servidor
		try{		
			skCliente = new Socket( HOST , PUERTO );
			
			InputStream aux = skCliente.getInputStream();
			//genera el flujo de entrada, por aca RECIBO los mensajes que envie el servidor
			flujoEntrada = new DataInputStream( aux );
			
			OutputStream aux1 = skCliente.getOutputStream();
			//genera el flujo de salida, por aca se ENVIAN los menajes al servidor
			flujoSalida= new DataOutputStream( aux1 );
			
			
			
			//Creo un hilo que escuche los mensajes del servidor
			Runnable escuchaServidor = new HiloEscuchaServidor();
			Thread hiloEscucha = new Thread(escuchaServidor);
			hiloEscucha.start();	
			
			} catch( Exception e ) {
			
			System.out.println( e.getMessage() +"ERROR");
			
			}
		
		
		
		
	}
	
	@Override
	public void paint(Graphics g) {
		g.clearRect(0, 0, 500, 500);
		
		g.setColor(Color.blue);
		String s = new String("HAZ CLICK ");
		g.drawString(s,10,10);
		for (int i=0;i<numPuntos;i++){
			puntos[i].dibujar(g);
		}	
	}

	private class HiloEscuchaServidor implements Runnable{
		int x,y;
		int idMensaje;
		@Override
		public void run() {
			try {
				//el primer mensaje que recibo del servidor es mi id;
				idCliente=Integer.parseInt(flujoEntrada.readUTF());
				System.out.println("ID: "+idCliente);
				//escucho permanentemente los mensajes del servidor
				while(true){
				
						//Asumo que el servidor primero envia la coordenada X y luego la Y
						idMensaje=Integer.parseInt(flujoEntrada.readUTF());
						x=Integer.parseInt(flujoEntrada.readUTF());
						y=Integer.parseInt(flujoEntrada.readUTF());
						puntos[idMensaje].asignarPosicionActual(x, y);
						
						//System.out.println("IDCLient: "+idCliente+" IdMensaje "+idMensaje+" X: "+x+" Y: "+y);
						//finalmete despues de haber recibio las coordenas vuelvo a pintarme con las nuevas corrdenadas
						repaint();
					
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	
	public static void main( String[] arg ) {
		JFrame frame = new JFrame("Cliente 5_2");
		Cliente5_2 cliente = new Cliente5_2();
		frame.add(cliente);
		frame.setVisible(true);
		frame.setSize(300,300);
		cliente.grabFocus();
		Thread hilo = new Thread(cliente);
		hilo.start();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	@Override
	public void run() {
		try {
			int x,y;
			
			while(true){
				
				Thread.sleep(1000);
				x=(int)(Math.random()*10000)%300;
				y=(int)(Math.random()*10000)%300;
				flujoSalida.writeUTF(""+idCliente);
				flujoSalida.writeUTF(""+x);
				flujoSalida.writeUTF(""+y);
				
			}
			
			
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			
		
		
	}



	
	
}
